/*
 * ValidadorFecha.java
 *
 * Created on October 24, 2007, 4:57 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package web.util.validadores;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import web.util.Utils;

/**
 *
 * @author kabad
 */
public class ValidadorFecha implements Validator {

    private Date fechaGuia;

    /** Creates a new instance of ValidadorFecha */
    public ValidadorFecha(Date fechaGuia) {

        this.fechaGuia = fechaGuia;
    }

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        FacesMessage mensajeFace = null;
        String keyFecha = "";
        String mensaje = "";
        String pattern = "dd/MM/yyyy";
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern(pattern);

        Date fecha = (Date) value;
        Calendar fechaSeleccionada = Calendar.getInstance();
        fechaSeleccionada.setTime(fecha);
        int dia1 = fechaSeleccionada.get(Calendar.DAY_OF_MONTH);
        int mes1 = fechaSeleccionada.get(Calendar.MONTH);
        int anio1 = fechaSeleccionada.get(Calendar.YEAR);

        Calendar fechaActual = Calendar.getInstance();
        fechaActual.setTime(fechaGuia);
        int dia2 = fechaActual.get(Calendar.DAY_OF_MONTH);
        int mes2 = fechaActual.get(Calendar.MONTH);
        int anio2 = fechaActual.get(Calendar.YEAR);
        try {
            if (!(dia1 == dia2 && mes1 == mes2 && anio1 == anio2)) {
                if (fecha.compareTo(fechaGuia) < 0) {
//            mensajeFace=new FacesMessage(FacesMessage.SEVERITY_ERROR,"La fecha debe ser posterior a: "+  fechaGuia,"");      

                    String[] parametros = {sdf.format(fechaGuia)};
                    keyFecha = "component.calendar.fechaActual";
                    mensaje = Utils.getMessageResourceString(context.getApplication().getMessageBundle(), keyFecha, parametros, context.getViewRoot().getLocale());
                    mensajeFace = new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje, "");
                    throw new ValidatorException(mensajeFace);
                }
            }
        } catch (ClassCastException ex) {
            String[] parametros = {sdf.format(fecha)};
            keyFecha = "component.calendar.converter";
            mensaje = Utils.getMessageResourceString(context.getApplication().getMessageBundle(), keyFecha, parametros, context.getViewRoot().getLocale());
            mensajeFace = new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje, "");
            throw new ValidatorException(mensajeFace);
        }
    }
}
